c++ - C++ 中复杂的 Typedef
全部标签 免责声明:问题与Inheritanceinsteadoftypedef完全不同到目前为止我找不到任何类似的问题我喜欢玩C++模板元编程(主要是在家里,我有时会在工作中轻率地介绍它,但我不想让程序只对那些不费心去学习它的人可读),但是我一直每当出现问题时,编译器错误就会完全消除。问题是当然c++模板元编程是基于模板的,因此,无论何时您在深度嵌套的模板结构中遇到编译器错误,您都必须在10行错误消息中挖掘自己的方法。我什至习惯于在文本编辑器中复制/粘贴消息,然后缩进消息以获得一些结构,直到我了解实际发生的事情,这增加了一些跟踪错误本身的工作。据我所知,问题主要是由于编译器及其输出typede
我试图通过使用前向声明并将#includes移动到实现文件中来简化一堆头文件“includespaghetti”。但是,我不断遇到以下情况://Foo.h#include"Bar.h"classFoo{public:voidsomeMethod(Bar::someType_t&val);};//Bar.h...classBar{public:typedefstd::vectorsomeType_t;};我想在尽可能多的情况下删除#include"Bar.h"。我还看到Bar.h中的typedef列在Bar类之外的情况。我假设这两种情况都可以用相同的方式解决。有什么想法吗?
std::includes算法采用两个排序范围并检查set2是否在set1中(即set2的每个元素是否包含在set1中)?我想知道为什么eel.is/c++draft说这个算法的复杂度至多是2·(N1+N2-1)比较?相同的声明在:1.cppreference2.cplusplus在我看来,它应该最多只有2·N1比较,最坏的情况是max(set2)>=max(set1)。 最佳答案 我同意你的结论。来自AkiSuihkonen'sanswer的交错集合示例是错误的,因为算法会尽快退出2.cppreference上的示例实现有一个递增
我有一个结构(可以是类)并在另一个类中定义,如图所示structA{somedata_A;somespecificimplementation_A(someclass*S1);};classsomeclass{somedata_someclass;Aa;};main(){someclassc1,*c2;c2=&c1;c1.a.somespecificimplementation_A(c2);}如何验证c2确实是c1的引用?请原谅我提出这个例子,因为很明显c2是c1的引用。更新:A不存储指向某个类的指针 最佳答案 如果您对parent
请问C++中make_heap的算法是什么使得复杂度为3*N?我唯一能想到的通过插入元素来制作堆的方法具有O(NLogN)的复杂性。非常感谢! 最佳答案 您将堆表示为一个数组。第i个元素下方的两个元素位于位置2*i+1和2*i+2。如果数组有n个元素,那么从末尾开始,取出每个元素,让它“落”到堆中的正确位置。这是要运行的O(n)。为什么?那么对于n/2元素,没有子元素。对于n/4,有一个高度为1的子树。对于n/8,有一个高度为2的子树。对于n/16,有一个高度为3的子树。依此类推。所以我们得到系列n/22+2*n/23+3*n/24
出于好奇,我想知道关于解析C++的一些“理论”结果是什么。让n成为我的项目的大小(例如,在LOC中,但由于我们将处理big-O它不是很重要)C++的解析时间复杂度是O(n)吗?如果不是,复杂性如何?C(或Java或任何语法意义上更简单的语言)是否在O(n)中解析?C++1x是否会引入更难解析的新特性?非常感谢引用! 最佳答案 我认为出于问题的目的,不同的人以不同的方式解释了“解析”一词。从狭义的技术意义上讲,解析只是验证源代码是否与语法匹配(或者甚至可能构建树)。有一个相当普遍的民间定理,它说您根本无法解析C++(在这个意义上),因
#includeusingnamespacestd;classA{typedefintmyInt;intk;public:A(inti):k(i){}myIntgetK();};myIntA::getK(){returnk;}intmain(intargc,char*constargv[]){Aa(5);cout在这一行中,myInt未被编译器识别为“int”:myIntA::getK(){returnk;}如何让编译器将myInt识别为int? 最佳答案 typedef创建同义词,而不是新类型,因此myInt和int已经相同。问题
我看到这样的语句typedef*unspecified*value_type;typedef*unspecified*reference;在Boost::multi_array类的声明中。namespaceboost{template>classmulti_array{public://types:typedefValueTypeelement;typedef*unspecified*value_type;typedef*unspecified*reference;typedef*unspecified*const_reference;typedef*unspecified*diffe
在类范围内声明typedef是不好的做法吗?为每个函数声明它们以确保没有人包含该文件然后创建具有相同名称的东西是否更好?例如typedefstd::vector::size_typevec_int;在我的一些标题中会有用,因为在某些类中有许多使用这种类型的函数,但另一方面我必须将它放在标题中,不是吗?或者我可以将它放在源文件的顶部吗? 最佳答案 我想说的是将范围保持在最低限度;有了它,做最干净的事情。如果您将它用于一个功能,请将其保留在该功能的范围内。如果您将它用于多个功能,请将其设为私有(private)typedef。如果您希望
这可能太明显了。但是,尽管许多stackoverflow线程讨论了这个问题的不同方面,但我找不到具体的答案。typedefstruct_tmp{unsignedinta;unsignedintb;}tmp;intmain(){intc=10;if(c我将这个程序编译为-g++-lstdc++a.cpp我得到一个错误-expectedprimary-expressionbefore‘)’token我想我遗漏了一些非常明显和直接的东西。但似乎无法确定它:-/谢谢! 最佳答案 5.3.3Sizeof[expr.sizeof]1)Thesi